package com.did.service;

import com.did.protocol.base.AuthorityIssuer;

import java.util.List;

/**
 * @author DELL
 * 颁发机构操作的服务接口
 */
public interface AuthorityIssuerService {
    /**
     * 在链上注册一个颁发机构
     *
     * @param privateKey      发送交易时签名用的私钥
     * @param authorityIssuer 颁发机构基本信息
     * @return 注册结果
     */
    Boolean registerAuthorityIssuer(String privateKey, AuthorityIssuer authorityIssuer);


    /**
     * 移除颁发机构
     *
     * @param did        颁发机构的DID标识
     * @param privateKey 发送交易用到的私钥
     * @return 移除结果
     */
    Boolean removeAuthorityIssuer(String did, String privateKey);

    /**
     * 检验DID标识是否为颁发机构
     *
     * @param did DID身份标识
     * @return 是否为办法机构
     */
    Boolean isAuthorityIssuer(String did);


    /**
     * 指定DID身份标识查询颁发机构信息
     *
     * @param did DID身份标识
     * @return 返回颁发机构信息
     */
    AuthorityIssuer queryAuthorityIssuerInfo(String did);

    /**
     * 获取所有颁发机构
     *
     * @param index 起始位置
     * @param num   返回数量
     * @return 结果列表
     */
    List<AuthorityIssuer> getAllAuthorityIssuerList(Integer index, Integer num);

    /**
     * 注册新机构类型
     *
     * @param privateKey 注册者私钥
     * @param issuerType 合法机构类型
     * @param did        添加者DID标识
     * @return 注册结果
     */
    Boolean registerIssuerType(String privateKey, String issuerType, String did);

    /**
     * 给机构添加类型
     *
     * @param did             合法颁发机构DID身份标识
     * @param privateKey      发起者私钥
     * @param issuerType      类型
     * @param targetIssuerDid 目标机构DID身份标识
     * @return 添加结果
     */
    Boolean addIssuerWithType(String did, String privateKey, String issuerType, String targetIssuerDid);

    /**
     * 给机构移除类型
     *
     * @param did             合法颁发机构DID身份标识
     * @param privateKey      发起者私钥
     * @param issuerType      目标类型
     * @param targetIssuerDid 目标机构DID身份标识
     * @return 移除结果
     */
    Boolean removeIssuerFromType(String did, String privateKey, String issuerType, String targetIssuerDid);


    /**
     * 检查颁发机构类型是否合规
     *
     * @param issuerType      目标类型
     * @param targetIssuerDid 目标机构DID身份标识
     * @return 是否合规
     */
    Boolean isTargetTypeIssuer(String issuerType, String targetIssuerDid);

    /**
     * 获取当前类型所有颁发机构
     *
     * @param issuerType 目标类型
     * @return 机构DID身份标识列表
     */
    List<String> getTargetTypeIssuerList(String issuerType);

    /**
     * 根据颁发机构名字获得DID身份标识列表
     *
     * @param name 名称关键字
     * @return DID身份标识列表
     */
    List<String> getDidListByName(String name);

}
